/**
 * 分页查询的接口
 *
 * 请求地址：http://localhost:3000/films
 * 请求方式：GET
 * 请求入参：
 *      page - 请求的页数
 *      pageSize - 每页显示的条数
 *
 * 响应出参：
 *      {
 *         code: 0,
 *         msg: 'ok',
 *         data: {
 *            pageTotal: 10, // 总的页数
 *            total: 100,    // 总的条数
 *            list: [],      // 当前页数据的集合
 *         }
 *      }
 */

const express = require("express");
const mongoose = require("mongoose");

// 创建 express 实例
const app = express();

// 下面的两段代码，创建 schema 创建 Model 放在路由处理函数中，第一次请求没有问题。但是后面请求时会报错
//    OverwriteModelError: Cannot overwrite `Film` model once compiled.
//    解决方案：拿到外面定义即可
const schema = new mongoose.Schema({
  filmId: Number,
  name: String,
});
const Model = mongoose.model("Film", schema);

// 注册一个 /films 的路由
app.get("/films", (req, res) => {
  // 获取前端传递过来的 page 与 pageSize 两个参数
  // req.query = { page: 111, pageSize 222 }

  // const page = req.query.page
  // const pageSize = req.query.pageSize

  // 设置一下默认值，当客户端没有传递正确的参数时，不至于报错
  const { page = 1, pageSize = 10 } = req.query;
  console.log("客户端传递过来的参数是", page, pageSize);

  Model.find({}, "filmId name", {
    skip: (page - 1) * pageSize,
    limit: pageSize,
  })
    .then((data) => {
      console.log("===data", data);

      Model.count().then((number) => {
        console.log("数据总条数", number);

        // 响应给客户端数据
        res.send({
          code: 0,
          msg: "ok",
          data: {
            pageTotal: Math.ceil(number / pageSize),
            total: number,
            list: data,
          },
        });
      });
    })
    .catch((error) => {
      console.log("===error", error);

      // 响应给客户端数据
      res.send({
        code: -1,
        msg: "请求失败",
        data: null,
      });
    });
});

async function main() {
  // 建立 mongodb 的连接
  await mongoose.connect("mongodb://127.0.0.1/maizuo");
  console.log("数据库连接成功");

  // 启动 web 服务。app.listen
  app.listen(3000, () => {
    console.log("服务启动成功");
  });
}

main();
